/**
 * created by 小卷毛, 2021/8/28
 * Copyright (c) 2021, 416143467@qq.com All Rights Reserved.
 * #                   *********                            #
 * #                  ************                          #
 * #                  *************                         #
 * #                 **  ***********                        #
 * #                ***  ****** *****                       #
 * #                *** *******   ****                      #
 * #               ***  ********** ****                     #
 * #              ****  *********** ****                    #
 * #            *****   ***********  *****                  #
 * #           ******   *** ********   *****                #
 * #           *****   ***   ********   ******              #
 * #          ******   ***  ***********   ******            #
 * #         ******   **** **************  ******           #
 * #        *******  ********************* *******          #
 * #        *******  ******************************         #
 * #       *******  ****** ***************** *******        #
 * #       *******  ****** ****** *********   ******        #
 * #       *******    **  ******   ******     ******        #
 * #       *******        ******    *****     *****         #
 * #        ******        *****     *****     ****          #
 * #         *****        ****      *****     ***           #
 * #          *****       ***        ***      *             #
 * #            **       ****        ****                   #
 */
package com.rzico.sbl.service

import android.app.*
import android.content.Intent
import android.graphics.BitmapFactory
import android.os.Build
import android.os.IBinder
import com.rzico.sbl.R
import com.rzico.sbl.ui.MainActivity

/**
 * 描 述：前台服务，常驻通知栏
 *        清单配置：
 *            <!-- 前台服务权限 -->
 *            <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
 *
 *            <!-- 前台常驻服务 -->
 *            <service android:name=".service.ForegroundService" />
 *
 * 作 者：小卷毛  2021-08-28 15:38
 * 修改描述：
 * 修 改 人：
 * 修改版本：
 */
class ForegroundService : Service() {

    override fun onBind(intent: Intent): IBinder? = null

    @Suppress("DEPRECATION")
    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        // 在Android进行通知处理，首先需要重系统哪里获得通知管理器NotificationManager，它是一个系统Service。
        val manager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager

        // 获取构建好的Notification
        val notification = Notification.Builder(this.applicationContext)
            .also {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    manager.createNotificationChannel(
                        NotificationChannel(
                            CHANNEL_ONE_ID,
                            CHANNEL_ONE_NAME,
                            NotificationManager.IMPORTANCE_DEFAULT
                        ).apply {
                            setSound(null, null)
                        }
                    )
                    it.setChannelId(CHANNEL_ONE_ID)
                    it.setOnlyAlertOnce(true) //设置只响一次
                }

                // 设置下拉列表中的图标(大图标)
                it.setLargeIcon(BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher))
                    // 设置状态栏上的提示语
                    .setTicker("您有一个后台任务")
                    // 设置下拉列表里的标题
                    .setContentTitle("${getString(R.string.app_name)}正在后台运行")
                    // 设置状态栏内的小图标24X24
                    .setSmallIcon(R.mipmap.ic_launcher)
                    // 设置详细内容
                    .setContentText("为了能正常收到推送通知，请不要结束应用。")
                    // 设置 延迟Intent
                    // 最后一个参数可以为PendingIntent.FLAG_CANCEL_CURRENT 或者 PendingIntent.FLAG_UPDATE_CURRENT
                    .setContentIntent(
                        PendingIntent.getActivity(
                            this,
                            0,
                            Intent(this, MainActivity::class.java),  //设置点击通知跳转的Intent
                            0
                        )
                    )
                    // 设置该通知发生的时间
                    .setWhen(System.currentTimeMillis())
                    // 默认震动方式
                    .setDefaults(Notification.DEFAULT_VIBRATE)
                    // 优先级高
                    .setPriority(Notification.PRIORITY_HIGH)
            }.build()

        // FLAG_AUTO_CANCEL表明当通知被用户点击时，通知将被清除
        notification.flags = notification.flags or Notification.FLAG_AUTO_CANCEL
        // 将此通知放到通知栏的"Ongoing"即"正在运行"组中
        notification.flags = notification.flags or Notification.FLAG_ONGOING_EVENT
        // 表明在点击了通知栏中的"清除通知"后，此通知不清除，常与FLAG_ONGOING_EVENT一起使用
        notification.flags = notification.flags or Notification.FLAG_NO_CLEAR

        // manager.notify(NOTIFICATION_FLAG, notification);
        // 启动前台服务
        // 参数一：唯一的通知标识；参数二：通知消息
        startForeground(NOTIFICATION_FLAG, notification)

        // 如果Service被终止，当资源允许情况下，重启service
        return START_STICKY
    }

    override fun onDestroy() {
        super.onDestroy()
        // 停止前台服务--参数：表示是否移除之前的通知
        stopForeground(true)
    }

    companion object {
        private const val NOTIFICATION_FLAG = 0X12
        private const val CHANNEL_ONE_ID = "COM_SBL_SLG_NOTIFY_ID"
        private const val CHANNEL_ONE_NAME = "COM_SBL_SLG_NOTIFY_NAME"
    }

}